Spring Cloud Gateway হল একটি API গেটওয়ে, যা ক্লায়েন্ট-সাইড সিকিউরিটি এবং রুটিং টাস্কের জন্য ব্যবহৃত হয়। এটি আপনাকে বিভিন্ন সার্ভিসের উপর লোড ব্যালেন্সিং, সিকিউরিটি এবং রেট লিমিটিং সমর্থন সহ একটি কাস্টম গেটওয়ে সেটআপ করতে দেয়।
এই গেটওয়ে সাধারণত সার্ভিস-মেশ বা মাইক্রোসার্ভিস আর্কিটেকচারে ব্যবহৃত হয়। Spring Cloud Gateway-এ সিকিউরিটি ইন্টিগ্রেশন বিভিন্ন পদ্ধতিতে করা যেতে পারে, যেমন JWT (JSON Web Tokens), OAuth2, বা Basic Authentication। এই গেটওয়ে সার্ভিসে গেটওয়ে লেভেলে সিকিউরিটি নিশ্চিত করার পাশাপাশি ক্লায়েন্ট সাইডে সিকিউরিটি হ্যান্ডল করার জন্য কিছু কনফিগারেশন করা যায়।
প্রথমে, আপনার Spring Boot অ্যাপ্লিকেশনটি Spring Cloud Gateway হিসেবে কনফিগার করতে হবে।
pom.xml
ফাইলে নিচের ডিপেন্ডেন্সি যোগ করুন:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-oauth2-client</artifactId>
</dependency>
application.yml
বা application.properties
ফাইলে Spring Cloud Gateway কনফিগারেশন করুন, যাতে API রুটিং এবং সিকিউরিটি সিস্টেম ঠিকভাবে কাজ করে।
spring:
cloud:
gateway:
routes:
- id: user-service
uri: lb://user-service
predicates:
- Path=/users/**
filters:
- AddRequestHeader=X-Request-Foo, Bar
- AddResponseHeader=X-Response-Foo, Baz
# Example of security configuration
security:
oauth2:
client:
registration:
google:
client-id: YOUR-CLIENT-ID
client-secret: YOUR-CLIENT-SECRET
scope: profile, email
redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
authorization-grant-type: authorization_code
client-name: Google
provider:
google:
authorization-uri: https://accounts.google.com/o/oauth2/auth
token-uri: https://oauth2.googleapis.com/token
user-info-uri: https://www.googleapis.com/oauth2/v3/userinfo
এই কনফিগারেশনটি Spring Cloud Gateway-এ OAuth2-এর মাধ্যমে ক্লায়েন্ট সাইড সিকিউরিটি চালু করে, এবং গুগল OAuth2 প্রোভাইডার ব্যবহার করে ইউজারের লগইন এবং অথোরাইজেশন সেটআপ করে।
ক্লায়েন্ট-সাইড সিকিউরিটির জন্য, OAuth2
সিকিউরিটি ব্যবহার করার মাধ্যমে Spring Cloud Gateway অ্যাপ্লিকেশন সুরক্ষিত করা যেতে পারে। নিচে OAuth2 সিকিউরিটি ইন্টিগ্রেশন এর উদাহরণ দেওয়া হলো:
Spring Cloud Gateway ক্লায়েন্ট হিসেবে OAuth2 এর সাহায্যে API কলগুলির সিকিউরিটি নিশ্চিত করতে, OAuth2 Client Configuration করতে হয়। spring-security-oauth2-client
ডিপেনডেন্সি যুক্ত করুন এবং application.yml
ফাইলে সঠিক কনফিগারেশন দিন।
spring:
security:
oauth2:
client:
registration:
google:
client-id: YOUR-CLIENT-ID
client-secret: YOUR-CLIENT-SECRET
scope: profile, email
authorization-grant-type: authorization_code
redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
client-name: Google
provider:
google:
authorization-uri: https://accounts.google.com/o/oauth2/auth
token-uri: https://oauth2.googleapis.com/token
user-info-uri: https://www.googleapis.com/oauth2/v3/userinfo
OAuth2LoginAuthenticationFilter
ব্যবহার করে Spring Security এর সাহায্যে সিকিউরিটি কনফিগার করতে হবে। এই ফিল্টার ক্লায়েন্ট সাইডে সিকিউরিটি ভ্যালিডেশন করবে।
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableOAuth2Sso;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
@EnableWebSecurity
@EnableOAuth2Sso
public class SecurityConfig {
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/login/**", "/error", "/oauth2/**").permitAll()
.anyRequest().authenticated()
.and()
.oauth2Login(); // Enable OAuth2 login
return http.build();
}
}
এটি OAuth2 সিকিউরিটি সিস্টেম তৈরি করবে যা গুগল বা অন্য OAuth2 প্রোভাইডার দ্বারা অ্যাক্সেস কন্ট্রোল নিশ্চিত করবে।
Spring Cloud Gateway এর সাথে JWT ব্যবহার করে সিকিউরিটি ইন্টিগ্রেশন করার জন্য, আপনাকে কিছু ফিল্টার এবং স্ট্র্যাটেজি কনফিগার করতে হবে।
একটি কাস্টম ফিল্টার তৈরি করুন যা JWT টোকেন যাচাই করবে এবং নিরাপদ API রিকোয়েস্ট অনুমোদন করবে।
import org.springframework.security.oauth2.jwt.Jwt;
import org.springframework.security.oauth2.jwt.JwtDecoder;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import org.springframework.web.server.WebFilter;
import org.springframework.web.server.WebFilterChain;
@Component
public class JwtTokenFilter implements WebFilter {
private final JwtDecoder jwtDecoder;
public JwtTokenFilter(JwtDecoder jwtDecoder) {
this.jwtDecoder = jwtDecoder;
}
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
String token = exchange.getRequest().getHeaders().getFirst("Authorization");
if (token != null && token.startsWith("Bearer ")) {
String jwtToken = token.substring(7);
Jwt jwt = jwtDecoder.decode(jwtToken); // Validate and decode JWT token
// Further processing can be done here, e.g., setting user details in SecurityContext
}
return chain.filter(exchange);
}
}
এই ফিল্টারটি Spring Cloud Gateway এর রুট ফিল্টার হিসেবে যুক্ত করা যাবে। এইভাবে আপনি API গেটওয়ে লেভেলে সিকিউরিটি নিশ্চিত করতে পারবেন।
spring:
cloud:
gateway:
filters:
- name: JwtTokenFilter
application.yml-এ OAuth2 সেটআপ:
spring:
security:
oauth2:
client:
registration:
google:
client-id: YOUR-CLIENT-ID
client-secret: YOUR-CLIENT-SECRET
scope: profile, email
authorization-grant-type: authorization_code
redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
client-name: Google
provider:
google:
authorization-uri: https://accounts.google.com/o/oauth2/auth
token-uri: https://oauth2.googleapis.com/token
user-info-uri: https://www.googleapis.com/oauth2/v3/userinfo
cloud:
gateway:
routes:
- id: user-service
uri: lb://user-service
predicates:
- Path=/users/**
SecurityConfig.java:
@Configuration
@EnableWebSecurity
@EnableOAuth2Sso
public class SecurityConfig {
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/login/**", "/error", "/oauth2/**").permitAll()
.anyRequest().authenticated()
.and()
.oauth2Login();
return http.build();
}
}
এইভাবে, Spring Cloud Gateway এর সাথে ক্লায়েন্ট-সাইড সিকিউরিটি ইন্টিগ্রেশন করতে পারেন, যা নিরাপদ এবং স্কেলেবল API গেটওয়ে প্রদান করবে।
Read more